import 'package:flutter_test/flutter_test.dart';
import 'package:hive/hive.dart';
import 'package:lmmi/common/services/user_service.dart';
import 'package:lmmi/common/entity/user.dart';

void main() {
  group('用户名长度限制演示', () {
    setUpAll(() async {
      // 初始化 Hive 测试环境
      Hive.init('./test/hive_demo_db');

      // 注册适配器
      if (!Hive.isAdapterRegistered(0)) {
        Hive.registerAdapter(UserEntityAdapter());
      }

      // 打开用户数据盒子
      await Hive.openBox<UserEntity>('users');
      await Hive.openBox('current_user');
    });

    tearDownAll(() async {
      // 清理测试数据
      await Hive.deleteFromDisk();
    });

    setUp(() async {
      // 每个测试前清空数据
      final userBox = Hive.box<UserEntity>('users');
      final currentUserBox = Hive.box('current_user');
      await userBox.clear();
      await currentUserBox.clear();
    });

    test('演示用户名长度限制功能', () async {
      print('\n🎯 用户名长度限制功能演示');
      print('=' * 50);

      // 测试用例数据
      final testCases = [
        {'username': 'user1', 'expected': true, 'description': '5个字符 - 应该成功'},
        {'username': 'user12', 'expected': true, 'description': '6个字符 - 应该成功'},
        {
          'username': 'user123',
          'expected': false,
          'description': '7个字符 - 应该失败',
        },
        {
          'username': 'verylongusername',
          'expected': false,
          'description': '16个字符 - 应该失败',
        },
        {'username': '用户名', 'expected': true, 'description': '3个中文字符 - 应该成功'},
        {
          'username': '用户名测试用',
          'expected': true,
          'description': '6个中文字符 - 应该成功',
        },
        {
          'username': '用户名测试用户名',
          'expected': false,
          'description': '9个中文字符 - 应该失败',
        },
        {'username': 'a', 'expected': true, 'description': '1个字符 - 应该成功'},
        {
          'username': '',
          'expected': true,
          'description': '空字符串 - 应该成功（UI层会阻止）',
        },
      ];

      print('\n📝 注册测试结果:');
      print('-' * 50);

      for (int i = 0; i < testCases.length; i++) {
        final testCase = testCases[i];
        final username = testCase['username'] as String;
        final expected = testCase['expected'] as bool;
        final description = testCase['description'] as String;

        final result = await UserService.register(
          username: username,
          password: 'password123',
        );

        final status = result == expected ? '✅' : '❌';
        final actualText = result ? '成功' : '失败';
        final lengthInfo = username.isEmpty ? '(空)' : '(${username.length}字符)';

        print('${i + 1}. $status $description');
        print('   用户名: "$username" $lengthInfo');
        print('   结果: $actualText');
        print('');

        expect(result, equals(expected), reason: '用户名 "$username" 的注册结果不符合预期');
      }

      print('🎉 所有测试用例都通过了！');
      print('\n📊 功能总结:');
      print('- ✅ 支持1-6个字符的用户名');
      print('- ✅ 拒绝超过6个字符的用户名');
      print('- ✅ 支持中文、英文、数字等各种字符');
      print('- ✅ 在服务层提供可靠的验证');
      print('- ✅ 保持向后兼容性');
    });

    test('演示实际使用场景', () async {
      print('\n🎬 实际使用场景演示');
      print('=' * 50);

      print('\n场景1: 用户注册');
      print('-' * 30);

      // 模拟用户尝试注册
      final attempts = [
        'john', // 成功
        'alice123', // 失败 - 8个字符
        '小明', // 成功 - 2个中文字符
        'user@domain.com', // 失败 - 16个字符
      ];

      for (final username in attempts) {
        final success = await UserService.register(
          username: username,
          password: 'password123',
        );

        if (success) {
          print('✅ 用户 "$username" 注册成功');
        } else {
          print('❌ 用户 "$username" 注册失败 - 用户名超过6个字符');
        }
      }

      print('\n场景2: 用户名修改');
      print('-' * 30);

      // 创建一个用户
      await UserService.register(username: 'user1', password: 'pass123');
      final user = (await UserService.login('user1', 'pass123'))!;

      print('当前用户: ${user.username}');

      // 模拟用户名修改验证（这里只演示长度检查逻辑）
      final newUsernames = ['user12', 'verylongname'];

      for (final newUsername in newUsernames) {
        if (newUsername.length <= 6) {
          print('✅ 可以修改为 "$newUsername"');
        } else {
          print('❌ 无法修改为 "$newUsername" - 超过6个字符限制');
        }
      }

      print('\n🎯 演示完成！');
      print('用户名长度限制功能正常工作，为应用提供了可靠的数据验证。');
    });
  });
}
